﻿using Logging.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Logging.Utils
{
    public class LogTrace
    {
        private TRACE_APPLICATION Trace
        {
            get;
            set;
        }

        #region Attributs

        /// <summary>
        /// Login de l'utilisateur connecté à la base de données.
        /// </summary>
        public String UtilisateurConnecte
        {
            get;
            set;
        }

        /// <summary>
        /// Login de l'utilisateur qui effectue les modifications dans l'application.
        /// </summary>
        public String Utilisateur
        {
            get;
            private set;
        }

        /// <summary>
        /// Machine de l'utilisateur.
        /// </summary>
        public String Machine
        {
            get;
            private set;
        }

        /// <summary>
        /// Ecran où a eu lieu l'anomalie.
        /// </summary>
        public String Ecran
        { 
            get; 
            set; 
        }

        /// <summary>
        /// Email de l'utilisateur en cours d'utilisation de l'application.
        /// </summary>
        public String Email
        {
            get;
            set;
        }

        /// <summary>
        /// Niveau de trace dans l'application.
        /// </summary>
        public LogLevel Niveau
        {
            get;
            set;
        }

        /// <summary>
        /// Identifiant.
        /// </summary>
        public String Identifiant
        {
            get;
            set;
        }

        /// <summary>
        /// Détails du message d'erreur
        /// </summary>
        public String DetailMessage
        {
            get;
            set;
        }

        #endregion

        #region Constructeur

        public LogTrace()
        {
            Machine = Environment.MachineName;
            Utilisateur = Environment.UserName;
        }

        public LogTrace(String utilisateurConnecte, String ecran, String email, LogLevel niveau, String identifiant, String detail):this()
        {
            UtilisateurConnecte = utilisateurConnecte;
            Ecran = ecran;
            Email = email;
            Niveau = niveau;
            Identifiant = identifiant;
            DetailMessage = detail;
        }
        
        #endregion

        #region Méthodes

        /// <summary>
        /// Appelé pour créer l'instance de l'attribut Trace.
        /// Permet en fonction des différents de créer une trace facilement loggable sur différents support (BDD, CSV, TXT, XML)
        /// </summary>
        public TRACE_APPLICATION CreateTrace()
        {
            Trace = new TRACE_APPLICATION
            {
                UTILISATEUR_CONNECTE = UtilisateurConnecte,
                UTILISATEUR = Utilisateur,
                NIVEAU = Niveau.ToString(),
                MACHINE = Machine,
                IDENTIFIANT = Identifiant,
                ECRAN = Ecran,
                DETAIL_MESSAGE = DetailMessage,
                DATE_HEURE = DateTime.Now.ToShortDateString()
            };
            return Trace;
        }

        #endregion
    }
}
